/**
 * Created by leiqr on 2015/7/2.
 */
define(function(require, exports, module) {
    //var __wx = require('http://res.myscrm.cn/o2o/public/js/lib/jweixin-1.0.0.js');
    var __wx = require('./jweixin');
    var myweixin = {
        // 兼容6.0.2以下版本的微信分享
        _fixShare : function(share){
            //require('http://res.myscrm.cn/o2o/public/js/lib/WeixinApi.js');
            require('./WeixinApi');
            // 初始化WeixinApi，等待分享
            WeixinApi.ready(function(Api) {
                // 微信分享的数据
                var wxData = {
                    "imgUrl" :share.imgUrl,
                    "link" : share.link,
                    "desc" : share.desc,
                    "title" : share.title
                };

                // 分享的回调
                var wxCallbacks = {
                    // 收藏操作不执行回调，默认是开启(true)的
                    favorite : false,

                    // 分享操作开始之前
                    ready : function() {
                        // 你可以在这里对分享的数据进行重组
                        //alert("准备分享");
                    },
                    // 分享被用户自动取消
                    cancel : function(resp) {
                        // 你可以在你的页面上给用户一个小Tip，为什么要取消呢？
                        //alert("分享被取消，msg=" + resp.err_msg);
                    },
                    // 分享失败了
                    fail : function(resp) {
                        // 分享失败了，是不是可以告诉用户：不要紧，可能是网络问题，一会儿再试试？
                        alert("分享失败，msg=" + resp.err_msg);
                    },
                    // 分享成功
                    confirm : function(resp) {
                        // 分享成功了，我们是不是可以做一些分享统计呢？
                        //alert("分享成功，msg=" + resp.err_msg);
                    },
                    // 整个分享过程结束
                    all : function(resp,shareTo) {
                        // 如果你做的是一个鼓励用户进行分享的产品，在这里是不是可以给用户一些反馈了？
                        // alert("分享" + (shareTo ? "到" + shareTo : "") + "结束，msg=" + resp.err_msg);
                    }
                };

                // 用户点开右上角popup菜单后，点击分享给好友，会执行下面这个代码
                Api.shareToFriend(wxData, wxCallbacks);

                // 点击分享到朋友圈，会执行下面这个代码
                Api.shareToTimeline(wxData, wxCallbacks);

                // 点击分享到腾讯微博，会执行下面这个代码
                Api.shareToWeibo(wxData, wxCallbacks);

                // iOS上，可以直接调用这个API进行分享，一句话搞定
                Api.generalShare(wxData,wxCallbacks);
            });
        },

        // 监听微信分享JSSDK
        _wxShare:function(wx, share){
            // 监听“分享给朋友”
            wx.onMenuShareAppMessage({
                title: share.title,
                desc: share.desc,
                link: share.link,
                imgUrl: share.imgUrl
            });

            //监听“分享到朋友圈”
            wx.onMenuShareTimeline({
                title: share.title,
                link: share.link,
                imgUrl: share.imgUrl
            });

            //监听“分享到QQ”
            wx.onMenuShareQQ({
                title: share.title,
                desc: share.desc,
                link: share.link,
                imgUrl: share.imgUrl
            });

            //监听“分享到微博”
            wx.onMenuShareWeibo({
                title: share.title,
                desc: share.desc,
                link: share.link,
                imgUrl: share.imgUrl
            });
        },

        _weixin : function () {
            var wx  = {
                    isWeixin: false,
                    version: -1
                },
                reg = /MicroMessenger\/([\d.]+)/i,
                match = navigator.userAgent.match(reg);

            if (match) {
                wx.isWeixin = true;
                wx.version = match[1];
            }

            return wx;
        },

        // 初始化分享
        initShare : function(config){
            var me = this;

            //分享数据
            var share = {};
            share.imgUrl = config.imgUrl;
            share.link = config.link;
            share.desc = config.desc;
            share.title= config.title;

            var wx = this._weixin();
            if(wx.isWeixin){
                var strVer = wx.version.replace(/\./g, '');
                if(strVer.length < 2){
                    strVer += '00';
                }
                if(strVer.length < 3){
                    strVer += '0';
                }
                if(strVer.length > 3){
                    strVer = strVer.substr(0,3);
                }
                var ver = parseInt(strVer, 10);
                if(ver < 602){
                    me._fixShare(share);
                    return;
                }
            }

            var wx = __wx;

            if(!wx){
                me._fixShare(share);
                return;
            }

            wx.config({
                appId: config.appId,
                timestamp: config.timestamp,
                nonceStr: config.nonceStr,
                signature: config.signature,
                jsApiList: [
                    'checkJsApi',
                    'onMenuShareTimeline',
                    'onMenuShareAppMessage',
                    'onMenuShareQQ',
                    'onMenuShareWeibo',
                    'hideMenuItems',
                    'showMenuItems',
                    'hideAllNonBaseMenuItem',
                    'showAllNonBaseMenuItem'
                ]
            });

            var isError = false;
            //config信息验证失败会执行error函数
            wx.error(function(res){
                isError = true;
                me._fixShare(share);
            });

            wx.ready(function () {
                if(isError){return;}
                wx.checkJsApi({
                    jsApiList: [
                        'onMenuShareTimeline'
                    ],
                    success: function (res) {
                        //如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
                        if(res.errMsg == "checkJsApi:ok"){
                            var chkResult = res.checkResult;
                            var api_name='onMenuShareTimeline';
                            if(chkResult[api_name] === true){
                                me._wxShare(wx, share);
                            }
                            else{
                                me._fixShare(share);
                            }
                        }
                        else{
                            me._fixShare(share);
                        }
                    }
                });
            });
        }
    };

    module.exports  = myweixin;
});